import Vue from "vue";
import VueRouter from "vue-router";
import "./router-util";
import routes from "./route";
import store from "@/store";

const router = new VueRouter({
	mode: "history",
	routes,
	scrollBehavior(to, from, savedPosition) {
		//如果是浏览器前进后退 那么使用保存的位置信息 否则就使用路由位置信息
		if (to.name == "search") {
			if (savedPosition) {
				return savedPosition;
			} else {
				if (
					Object.keys(to.params).length != 0 ||
					Object.keys(to.query).length != 0
				) {
					return { y: 600 };
				} else {
					return { y: 0 };
				}
			}
		}
	},
});

router.beforeEach(async(to, from, next) => {
	const token = store.state.users.token;
	if (token) {
		//用户已经登录
		if(to.path=='/login'||to.path=='/register'){
			//如果登录后想去登录页面 或者注册页面 
			next('/home')
		}else{
			//如果登录后想去除登录和注册的其他页面
			//那么就获取用户信息  vuex不是持久化的 在home组件发请求了 但如果当前路由在search 一刷新 vuex刷新了 但没有派发请求 也就没有用户信息
			const name=store.state.users.userInfo.nickName
			if(name){
				//有用户信息直接放行
				next()
			}else{
				//没有用户信息再次发请求
				try {
					await store.dispatch('users/getuserinfo')
					next()
				} catch (error) {
					//token过期了 退出登录重新登录
					await store.dispatch('users/userlogout')
					router.replace('/login')
				}
			}	
		}
	} else {
		//用户未登录
		next()
	}
});

Vue.use(VueRouter);
export default router;
